package main

import "fmt"

func main() {
	//条件判断的优先级
	a, b := false, true
	//下面的if语句实际上不是 (a && b) != true，而是 a && (b != true)
	//因此为了防止混淆优先级,记得使用小括号把想要优先运算的部分括起来
	if a && b != true {
		println("return true")
		return
	}
	println("return false") //输出 return false,因为 != 的优先级高于 &&

	//下面的 diff 只能在 if ... else 块里面使用
	yesterday := 27
	today := 30
	if diff := today - yesterday; diff > 0 {
		fmt.Printf("今天气温比昨天升高了: %d\n", diff)
	} else {
		fmt.Printf("今天气温比昨天降低了: %d\n", diff)
	}
	//fmt.Printf(diff) //此处报错:undefined: diff

	//上面这种写法一般用在判断一个函数的返回值是否正确
	if username, err := getUserName(); err == nil {
		fmt.Println("username: ", username)
	} else {
		fmt.Println("get username error")
	}

	//if语句的优雅写法
	score := 80
	ifDemo1(score)
	ifDemo2(score)
}

func getUserName() (string, error) {
	return "zhangsan", nil
}

func ifDemo1(score int) {
	if score >= 0 && score < 60 {
		fmt.Println("未及格")
	} else if score >= 60 && score < 80 {
		fmt.Println("及格了但不够优秀")
	} else if score >= 80 && score < 95 {
		fmt.Println("比较优秀但还有上升空间")
	} else if score >= 95 && score <= 100 {
		fmt.Println("三好学生")
	} else {
		fmt.Println("分数有问题")
	}
}

func ifDemo2(score int) {
	if score >= 0 && score < 60 {
		fmt.Println("未及格")
		return
	}
	if score >= 60 && score < 80 {
		fmt.Println("及格了但不够优秀")
		return
	}
	if score >= 80 && score < 95 {
		fmt.Println("比较优秀但还有上升空间")
		return
	}
	if score >= 95 && score <= 100 {
		fmt.Println("三好学生")
		return
	}
	fmt.Println("分数有问题")
}
